<?php

    /**
    * This is the model class for table "post_cat".
    *
    * The followings are the available columns in table 'post_cat':
    * @property string $id
    * @property string $name
    * @property string $alias
    * @property string $desc
    * @property string $icon
    * @property string $post_count
    * @property string $reply_count
    * @property string $parent_id
    * @property integer $index
    *
    * The followings are the available model relations:
    * @property PostCat $parent
    * @property PostCat[] $cats
    * @property Post[] $posts_parent
    * @property Post[] $posts
    */
    class PostCat extends CActiveRecord
    {
        /**
        * Returns the static model of the specified AR class.
        * @param string $className active record class name.
        * @return Cat the static model class
        */
        public static function model($className=__CLASS__)
        {
            return parent::model($className);
        }

        /**
        * @return string the associated database table name
        */
        public function tableName()
        {
            return 'post_cat';
        }

        /**
        * @return array validation rules for model attributes.
        */
        public function rules()
        {
            // NOTE: you should only define rules for those attributes that
            // will receive user inputs.
            return array(
                array('name, alias', 'required'),
                array('index', 'numerical', 'integerOnly'=>true),
                array('name, alias, desc, icon', 'length', 'max'=>50),
                array('parent_id, post_count, reply_count', 'length', 'max'=>10),
                // The following rule is used by search().
                // Please remove those attributes that should not be searched.
                array('id, name, alias, desc, parent_id, index', 'safe', 'on'=>'search'),
            );
        }

        /**
        * @return array relational rules.
        */
        public function relations()
        {
            // NOTE: you may need to adjust the relation name and the related
            // class name for the relations automatically generated below.
            return array(
                'parent' => array(self::BELONGS_TO, 'PostCat', 'parent_id'),
                'cats' => array(self::HAS_MANY, 'PostCat', 'parent_id'),
                'posts_parent' => array(self::HAS_MANY, 'Post', 'cat_parent_id'),
                'posts' => array(self::HAS_MANY, 'Post', 'cat_id'),
            );
        }

        /**
        * @return array customized attribute labels (name=>label)
        */
        public function attributeLabels()
        {
            return array(
                'id' => 'ID',
                'name' => 'Name',
                'alias' => 'Alias',
                'desc' => 'Desc',
                'parent_id' => 'Parent',
                'index' => 'Index',
            );
        }


        public function genarateCat(){
            $query = "
DELETE FROM `post_image`;    
DELETE FROM `post_reply`;
DELETE FROM `post`;
DELETE FROM `post_cat`;

ALTER TABLE `post_image` AUTO_INCREMENT=1; 
ALTER TABLE `post_reply` AUTO_INCREMENT=1;
ALTER TABLE `post` AUTO_INCREMENT=1; 
ALTER TABLE `post_cat` AUTO_INCREMENT=1; 
            ";

            Yii::app()->db->createCommand($query)->execute();

            $cats = array(
                'Điện thoại' => array(
                    'type' => 'SALE',
                    'icon' => 'mobile',
                    'childs' => array(
                        "iPhone" => 'apple',
                        "Android" => 'android',
                        "Windows Phone" => 'windows',
                        "BlackBerry" => 'btc',
                        "Smartphone khác" => 'mobile',
                        "Điện thoại phổ thông" => 'phone',
                        "Phụ kiện điện thoại" => 'stethoscope'
                    ),
                ),
                'Máy tính bảng' => array(
                    'type' => 'SALE',
                    'icon' => 'tablet',
                    'childs' => array(
                        "iPad" => 'apple',
                        "Máy tính bảng Android" => 'android',
                        "Máy tính bảng Windows" => 'windows',
                        "Máy tính bảng khác" => 'tablet',
                        "Phụ kiện máy tính bảng" => 'archive'
                    ),
                ),
                'Máy tính' => array(
                    'type' => 'SALE',
                    'icon' => 'laptop',
                    'childs' => array(
                        "Máy tính Apple" => 'apple',
                        "Máy tính Windows" => 'windows',
                        "Server | Workstation" => 'laptop',
                        "Linh, phụ kiện máy tính" => 'keyboard-o'
                    ),
                ),
                'Camera' => array(
                    'type' => 'SALE',
                    'icon' => 'camera',
                    'childs' => array(
                        "Máy ảnh DSLR" => 'camera',
                        "Máy ảnh Mirrorless" => 'camera',
                        "Máy ảnh Compact" => 'camera-retro',
                        "Ống kính" => 'circle-o',
                        "Máy quay" => 'video-camera',
                        "Camera quan sát" => 'dot-circle-o',
                        "Phụ kiện Camera" => 'arrows-alt'
                    ),
                ),
                'Đồ công nghệ' => array(
                    'type' => 'SALE',
                    'icon' => 'gamepad',
                    'childs' => array(
                        "Máy Nghe nhạc" => 'music',
                        "Máy chơi game" => 'gamepad',
                        "Máy đọc sách" => 'tablet',
                        "Thiết bị âm thanh" => 'volume-down',
                        "TV" => 'desktop',
                        "Máy chiếu" => 'video-camera',
                        "Thiết bị mạng, 3G" => 'dribbble',
                        "Thẻ nhớ | Lưu trữ" => 'hdd-o',
                        "Dây cáp" => 'code-fork'
                    ),
                ),
                'Mua sắm' => array(
                    'type' => 'SALE',
                    'icon' => 'shopping-cart',
                    'childs' => array(
                        "Mẹ và bé" => 'smile-o',
                        "Thời trang nam" => 'male',
                        "Thời trang nữ" => 'female',
                        "Trang sức, phụ kiện" => 'heart-o',
                        "Giày dép" => 'shopping-cart',
                        "Mỹ phẩm" => 'smile-o',
                        "Thú nuôi" => 'github-alt',
                        "Thực phẩm" => 'cutlery',
                        "Điện lạnh, điện máy, gia dụng" => 'archive',
                        "Dụng cụ sức khỏe" => 'stethoscope',
                        "Nhạc cụ" => 'music',
                        "Đồ chơi" => 'plane'
                    ),
                ),
                'Xe cộ' => array(
                    'type' => 'SALE',
                    'icon' => 'truck',
                    'childs' => array(
                        "Xe máy" => 'dot-circle-o',
                        "Ô tô" => 'truck',
                        "Xe đạp" => 'circle-o',
                        "Phương tiện khác" => 'wheelchair',
                        "Phụ tùng, phụ kiện" => 'wrench'
                    ),
                ),
                'Bất động sản' => array(
                    'type' => 'IMMOVABLE',
                    'icon' => 'home',
                    'childs' => array(
                        "Căn hộ chung cư" => 'building-o',
                        "Căn hộ tập thể" => 'building-o',
                        "Nhà trong ngõ" => 'home',
                        "Nhà mặt phố" => 'home',
                        "Văn phòng" => 'home',
                        "Cửa hàng, ki ốt" => 'home',
                        "Kho, xưởng, đất" => 'home',
                        "Chuyển nhượng kinh doanh" => 'retweet',
                        "Phòng nghỉ - khách sạn" => 'building-o',
                        "Phòng trọ" => 'home',
                        "Ở ghép" => 'home'
                    ),
                ),
                'Sim - Thẻ' => array(
                    'type' => 'SALE',
                    'icon' => 'credit-card',
                    'childs' => array(
                        "Sim số" => 'credit-card',
                        "Sim 3G" => 'credit-card',
                        "Thẻ cào các loại" => 'credit-card',
                    ),
                ),
                'Dịch vụ' => array(
                    'type' => 'SERVICE',
                    'icon' => 'suitcase',
                    'childs' => array(
                        "Lắp đặt, sửa chữa" => 'wrench',
                        "Sửa chữa ôtô xe máy" => 'cog',
                        "Website, SEO" => 'globe',
                        "Du lịch" => 'sun-o',
                        "Dịch vụ gia đình" => 'home',
                        "Dịch vụ văn phòng" => 'home',    
                        "Dịch vụ khác" => 'suitcase'
                    ),
                ),
                'Cộng đồng' => array(
                    'type' => 'ARTICLE',
                    'icon' => 'users',
                    'childs' => array(
                        "Thông báo và hướng dẫn" => 'bullhorn',
                        "Góp ý xây dựng" => 'comments-o',
                        "Xây dựng thương gia" => 'money',
                        "Hỗ trợ, hỏi đáp" => 'question-circle'
                    ),
                ),
            );
            Yii::import('ext.TextParser');
            $i = 1;
            foreach($cats as $catName => $info){
                $cat = new PostCat;
                $cat->name = $catName;
                $cat->alias = TextParser::toSEOString($catName);
                $cat->type = $info['type'];
                $cat->index = $i;
                $cat->icon = $info['icon'];
                $cat->save();

                $ii = 1;
                foreach($info['childs'] as $childCat => $icon){
                    $ccat = new PostCat;
                    $ccat->name = $childCat;
                    $ccat->alias = TextParser::toSEOString($childCat);
                    $ccat->parent_id = $cat->id;
                    $ccat->type = $info['type'];
                    $ccat->index = $ii;
                    $ccat->icon = $icon;
                    $ccat->save();  
                    $ii++;
                }
                $i++;
            }

        }

        public function getDataAll($cache = true){
            if($cache)  return Yii::app()->cacheData->getCatDataAll();

            $cats = $this->with(
                array('cats' => array(
                    'index' => 'alias',
                    'order' => 'cats.`index` ASC',
                    'with' => 'parent'
                ))
            )->findAll(array(
                'index'=>'alias',
                'order' => 't.`index` ASC',
                'condition' => 't.parent_id is NULL',
            ));


            $data = array();
            foreach($cats as $cat){
                $data[$cat->alias] = array(
                    'id' => $cat->id,
                    'name' => $cat->name,
                    'alias' => $cat->alias,
                    'type' => $cat->type,
                    'url' => $cat->url,
                    'desc' => $cat->desc,
                    'post_count' => $cat->post_count,
                    'reply_count' => $cat->reply_count,
                    'icon' => $cat->icon,
                    'cats' => array(),
                );
                if($cat->cats){
                    foreach($cat->cats as $childCat){
                        $data[$cat->alias]['cats'][$childCat->alias] = array(
                            'id' => $childCat->id,
                            'name' => $childCat->name,
                            'alias' => $childCat->alias,
                            'type' => $childCat->type,
                            'url' => $childCat->url,
                            'desc' => $childCat->desc,
                            'post_count' => $childCat->post_count,
                            'reply_count' => $childCat->reply_count,
                            'icon' => $childCat->icon,
                        );   
                    }
                }    
            }
            return $data;
        }

        public function getData(){
            return CHtml::listData($this->dataAll, 'id', 'name');
        }
        
        
        public function getChildData(){
            return !$this->parent_id ? CHtml::listData($this->dataAll[$this->alias]['cats'], 'id', 'name') : array();
        }

        public function getParentAliasById($cat_parent_id){
            $data = CHtml::listData($this->dataAll, 'id', 'alias');
            return $data[$cat_parent_id];
        }
        public function getChildAliasById($cat_parent_alias, $cat_id){
            $data = CHtml::listData($this->dataAll[$cat_parent_alias]['cats'], 'id', 'alias');
            return $data[$cat_id];
        }
        
        public function getDataGroup(){
            $data = array();
            foreach($this->dataAll as $cat){
                foreach($cat['cats'] as $childCat){
                    $data[$cat['name']][$childCat['id']] = $childCat['name'];    
                }       
            }
            return $data;
        }
        
        public function getDataForOptionTag(){
            $data = array();
            foreach($this->dataAll as $cat){
                foreach($cat['cats'] as $childCat){
                    $data[$childCat['id']] = array('type' => $childCat['type']);    
                }       
            } 
            return $data;
        }
        
        public function getUrl(){
            $params = $this->parent_id ? array(
                'parent_alias' => $this->parent->alias,
                'child_alias' => $this->alias,
            ) : array(
                'parent_alias' => $this->alias
            );
            return Yii::app()->createUrl('/hangve/post/index', $params);
        }
        
        public function updatePostCount(){
            $query = "
            UPDATE post_cat c SET post_count = IF(
                c.`parent_id` IS NULL, 
                (SELECT COUNT(*) FROM post WHERE cat_parent_id = c.`id`), 
                (SELECT COUNT(*) FROM post WHERE cat_id = c.`id`)
            );
            ";   
            Yii::app()->db->createCommand($query)->execute();
            Yii::app()->cacheData->getCatDataAll(true);
        }
        
        public function updateReplyCount(){
            $query = "
            UPDATE post_cat c SET reply_count = IF(
                c.`parent_id` IS NULL, 
                (SELECT COUNT(*) FROM post_reply WHERE cat_parent_id = c.`id`), 
                (SELECT COUNT(*) FROM post_reply WHERE cat_id = c.`id`)
            );
            ";   
            Yii::app()->db->createCommand($query)->execute();
            Yii::app()->cacheData->getCatDataAll(true);
        }
}